<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模拟应用连接文档</title>
    <link rel="stylesheet" href="lightbox.css">
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 0;
            padding: 20px;
            color: #333;
            max-width: 1200px;
            margin: 0 auto;
        }
        h1, h2, h3 {
            color: #0066cc;
        }
        h1 {
            border-bottom: 2px solid #0066cc;
            padding-bottom: 10px;
        }
        h2 {
            margin-top: 30px;
            border-left: 4px solid #0066cc;
            padding-left: 10px;
        }
        img {
            max-width: 90%;
            height: auto;
            display: block;
            margin: 20px auto;
            border: 1px solid #ddd;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
            border-radius: 4px;
            object-fit: contain;
            image-rendering: -webkit-optimize-contrast;
            image-rendering: crisp-edges;
            transform: translateZ(0);
            backface-visibility: hidden;
            cursor: pointer;
            transition: transform 0.3s ease;
        }
        
        img:hover {
            transform: scale(1.01);
        }
        pre {
            background-color: #f5f5f5;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
        }
        table, th, td {
            border: 1px solid #ddd;
        }
        th, td {
            padding: 12px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        .note {
            background-color: #e7f4ff;
            border-left: 4px solid #0066cc;
            padding: 15px;
            margin: 20px 0;
        }
        .warning {
            background-color: #fff8e1;
            border-left: 4px solid #ffc107;
            padding: 15px;
            margin: 20px 0;
        }
        /* 导航样式 */
        .nav-container {
            background-color: #f8f8f8;
            padding: 10px;
            margin-bottom: 20px;
            border-radius: 4px;
        }
        .nav-container a {
            display: inline-block;
            margin-right: 15px;
            text-decoration: none;
            color: #0066cc;
            padding: 5px 10px;
            border-radius: 4px;
        }
        .nav-container a:hover {
            background-color: #e0e0e0;
        }
        .nav-container a.active {
            background-color: #0066cc;
            color: white;
        }
        /* 页脚样式 */
        footer {
            margin-top: 30px;
            border-top: 1px solid #ddd;
            padding-top: 15px;
            text-align: center;
            font-size: 0.9em;
            color: #666;
        }
    </style>
</head>
<body>
    <!-- 导航栏 -->
    <div class="nav-container">
        <a href="../首页.html">首页</a>
        <a href="一、华为云设备接入服务IoTDA.html">1. 华为云设备接入服务IoTDA</a>
        <a href="二、真实设备连接.html">2. 真实设备连接</a>
        <a href="三、模拟设备连接.html">3. 模拟设备连接</a>
        <a href="四、模拟应用连接.html" class="active">4. 模拟应用连接</a>
        <a href="五、鸿蒙应用连接.html">5. 鸿蒙应用连接</a>
    </div>
    
    <h1>四、模拟应用连接</h1>
    
    <p>可以模拟设备连接，也可以模拟应用连接，在对实际应用进行连接时，我们需要先测试应用连接是否能够成功连接。华为官方提供了一个模拟应用服务器的应用快速接入，但他提供的例子是HTTPS协议，使用的是POSTMAN软件进行的测试。所以为了模拟应用使用MQTT协议接入，这里我们还是使用MQTTX软件进行测试(也可以使用其他的mqtt测试软件如MTQQ.FX使用方法都类似)。在进行此测试前，最好完成了二或三的设备接入，这里与前面有重复的地方我就不再讲了。</p>
    
    <h2>步骤一: 配置数据转发规则</h2>
    
    <p>在实现应用连接前，我们首先得配置数据转发规则如图:</p>
    
    <img src="../图片/图片4/图片1.png" alt="新建数据转发规则">
    
    <p>完成后点击右下角的创建规则后继续配置</p>
    
    <img src="../图片/图片4/图片2.png" alt="创建规则">
    
    <p>点击确认，下一步，并且启动规则</p>
    
    <img src="../图片/图片4/图片3.png" alt="启动规则">
    
    <p>完成就配置成功了。</p>
    
    <h2>步骤二: 云服务下载接入凭证</h2>
    
    <p>在接入信息中找到应用接入MQTTS列，点击预制接入凭证，会得到一个下载的TXT文档，打开是这样的信息：</p>
    
    <img src="../图片/图片4/图片4.png" alt="接入凭证内容">
    
    <div class="note">
        <p><strong>注意：</strong>access key对于一个用户来说好像只有一个，多次下载是不会变的，但是access code每次下载都会变化，最新下载的code会覆盖前面下载的code，也就是说旧下载会被废弃，下载一个后就不要随便点击下载了，不然在需要使用的地方都需要重新设置code信息。</p>
    </div>
    
    <h2>步骤三: 配置MQTTX信息</h2>
    
    <p>首先在我们的华为云服务器中复制应用接入地址，如图:</p>
    
    <img src="../图片/图片4/图片5.png" alt="应用接入地址">
    
    <p>在MQTTX软件中填入服务器地址协议为mqtts,设置端口为8883</p>
    
    <img src="../图片/图片4/图片6.png" alt="MQTTX服务器配置">
    
    <p>填入Client ID用户名和密码信息</p>
    
    <img src="../图片/图片4/图片7.png" alt="MQTTX认证信息">
    
    <div class="warning">
        <p><strong>注意：</strong>Client ID用户名和密码都与设备接入不同:</p>
        
        <table>
            <tr>
                <th>字段</th>
                <th>格式</th>
            </tr>
            <tr>
                <td>clientId</td>
                <td>全局唯一即可,建议使用"username"</td>
            </tr>
            <tr>
                <td>username</td>
                <td>accessKey=${accessKey}|timestamp=${timestamp}|instanceId=${instanceId}</td>
            </tr>
            <tr>
                <td>password</td>
                <td>${accessCode}</td>
            </tr>
        </table>
        
        <ul>
            <li>accessKEY就是你下载的预制接入凭证中的access key</li>
            <li>timestamp是13位的时间戳(Unix timestamp)转换工具-在线工具可在这里获取，注意是13位，其单位是毫秒，因为是模拟应用接入，所以我们这里使用静态的时间戳，在实际应用中可以使用代码生成时间戳</li>
            <li>instanceId是你的实例ID在总览的获取</li>
            <li>密码就是你下载的预制接入凭证中的access code(一定要是最新版的code)</li>
        </ul>
    </div>
    
    <p>完成后点击连接，有问题他会提示你，如果提示账号或密码错误有可能是你的时间戳比较老了，他只能接受与服务器时间戳5分钟以内的误差。</p>
    
    <img src="../图片/图片4/图片8.png" alt="连接成功">
    
    <p>连接成功后说明我们已经能够与服务器正确连接了，根据这些信息，我们就可以在应用中使用mqtt协议连接服务器了。</p>
    
    <!-- 页脚导航 -->
    <footer>
        <p>
            <a href="三、模拟设备连接.html">上一篇: 模拟设备连接</a> | 
            <a href="五、鸿蒙应用连接.html">下一篇: 鸿蒙应用连接</a>
        </p>
    </footer>
    
    <!-- 引入灯箱脚本 -->
    <script src="lightbox.js"></script>
</body>
</html>